package principal;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Contador {
	private Pattern padraoLinhasSubtraidas;
	private Pattern padraoLinhasModificadas;
	private Pattern padraoLinhasAdicionadas;
	private Pattern padraoComentario;
	private Pattern padraoLinhaEmBranco;
	
	private int numLinhasAdicionadas;
	private int numLinhasSubtraidas;
	private int numLinhasModificadas;
	private int numLinhasRealmenteAdicionadas;
	
	public Contador(){
		numLinhasAdicionadas = 0;
		numLinhasModificadas = 0;
		numLinhasSubtraidas = 0;
		numLinhasRealmenteAdicionadas = 0;
		
		padraoLinhasAdicionadas = Pattern.compile("^\\+[ \\t\\n\\x0B\\f\\r]*[^ \\/\\*\\+]");
		padraoLinhasModificadas = Pattern.compile("^![ \\t\\n\\x0B\\f\\r]*[^/\\*\\-]");
		padraoLinhasSubtraidas = Pattern.compile("^\\-[ \\t\\n\\x0B\\f\\r]*[^/\\*\\-]");
		padraoComentario = Pattern.compile("^[\\-\\+!][ \\t\\n\\x0B\\f\\r]*[\\/\\*\\+\\-]");
		padraoLinhaEmBranco = Pattern.compile("^[\\+\\-!][ \\t\\n\\x0B\\f\\r]*$");
	}
	
	public boolean ehLinhaAdicionada(String linha ){
		Matcher matcher = padraoLinhasAdicionadas.matcher(linha);
		Matcher matcher2 = padraoComentario.matcher(linha);
		Matcher matcher3 = padraoLinhaEmBranco.matcher(linha);
		return (matcher.find() && !matcher2.find()) && !matcher3.find();
	}

	public boolean ehLinhaSubtraida(String linha ){
		Matcher matcher = padraoLinhasSubtraidas.matcher(linha);
		Matcher matcher2 = padraoComentario.matcher(linha);
		Matcher matcher3 = padraoLinhaEmBranco.matcher(linha);
		return (matcher.find() && !matcher2.find()) && !matcher3.find();
	}
	
	public boolean ehLinhaModificada(String linha ){
		Matcher matcher = padraoLinhasModificadas.matcher(linha);
		Matcher matcher2 = padraoComentario.matcher(linha);
		Matcher matcher3 = padraoLinhaEmBranco.matcher(linha);
		return (matcher.find() && !matcher2.find()) && !matcher3.find();	}
	
	public void contaLinhas(){
		try{
			String linha = "";
			File diffUnificado = new File("C:\\Documents and Settings\\silviojr\\saida_unificado");
			BufferedReader reader = new BufferedReader(new FileReader(diffUnificado));
			
			linha = reader.readLine();
			
			while(linha != null){
				
				if(ehLinhaAdicionada(linha)){
					numLinhasAdicionadas++;
				}
				else if(ehLinhaSubtraida(linha)){
					numLinhasSubtraidas++;

				}
				linha = reader.readLine();
			}
			
			File diffContexto = new File("C:\\Documents and Settings\\silviojr\\saida_contexto");
			reader = new BufferedReader(new FileReader(diffContexto));

			linha = reader.readLine();
			
			while(linha != null){
				
				if(ehLinhaAdicionada(linha)){
					numLinhasRealmenteAdicionadas++;
				}
				else if(ehLinhaModificada(linha)){
					numLinhasModificadas++;
					System.out.println(linha);

				}
				linha = reader.readLine();
			}
		}
		catch(Exception e){
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		
		System.out.println("numLinhasRealmenteAdicionadas " + numLinhasRealmenteAdicionadas + " numLinhasAdicionadas " + numLinhasAdicionadas + " numLinhasSubtraidas " + numLinhasSubtraidas + " numLinhasModificadas " + numLinhasModificadas);
		
		/*System.out.println("Linhas adicionadas " + (numLinhasRealmenteAdicionadas + (numLinhasModificadas - numLinhasSubtraidas))
							+ " Linhas modificadas " + (numLinhasAdicionadas - (numLinhasRealmenteAdicionadas + (numLinhasModificadas - numLinhasSubtraidas))) 
							+ " Linhas subtraidas " + (numLinhasSubtraidas - (numLinhasAdicionadas - (numLinhasRealmenteAdicionadas + (numLinhasModificadas - numLinhasSubtraidas)))));
		*/
		
		System.out.println();
	}
}
